package com.atguigu.realtime.function;

import com.atguigu.realtime.util.AtguiguUtil;
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.annotation.FunctionHint;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;

import java.util.Set;

/**
 * @Author lzc
 * @Date 2023/3/17 10:15
 */
/*
泛型的定义: 如果只有一列:  单个类型  Row Pojo
如果还多咧: Row pojo

如果是 Row, 则需要用注解来注明每列的名字和类型
    @FunctionHint(output = @DataTypeHint("row<kw string>"))
    
 */
@FunctionHint(output = @DataTypeHint("row<kw string>"))
public class KwSplit extends TableFunction<Row> {
    // 约定的方法:
    // 返回值必须:void
    // 方法名必须:eval
    // 参数: 根据实际情况来定
    public void eval(String s) {
        if (s == null) {
            return;
        }
        
        // 使用中文分词器
        // 我是中国人中国人
        Set<String> kws = AtguiguUtil.ikSpilt(s);
        for (String kw : kws) {
            collect(Row.of(kw));  // 这个方法调用一次, 就产生一行数据
        }
        
    }
}
